/*!
	\file TableSymboles.h
	\brief La spécification de la classe TableSymboles

	Décrit la liste des méthodes et attributs associés à la class TableSymboles
	\author Arnaud MAILLET
	\date 03.01.2009
*/

/*! 
	\class TableSymboles
	\brief La classe permettant de construire la tables des symboles d'un fichier interprété

	Cette classe permet de construire la tables des symboles d'un fichier interprété.
	Les méthodes suivantes sont associées à un objet de type TableSymboles :
	\li chercheAjoute
	\li <<
*/
#ifndef TABLESYMBOLES_H_
#define TABLESYMBOLES_H_

#include "SymboleValue.h"
#include <vector>
#include <iostream>
using namespace std;

class TableSymboles {
public:
	/*! 
	\fn TableSymboles()
	\brief Constructeur de la classe TableSymboles.

	Ce constructeur construit une table vide de pointeurs sur des symboles valués
        */
	TableSymboles();

	/*! 
	\fn SymboleValue * chercheAjoute (int ligne, int colonne, Symbole s)
	\brief Retourne un pointeur sur un symbole valué
	Si s est identique à un symbole valué déjà présent dans la table, on renvoie un pointeur sur ce symbole valué sinon on insère un nouveau symbole valué correspondant à s et on renvoie un pointeur sur le nouveau symbole valué inséré
	\param ligne - la ligne du symbole
	\param colonne - la colonne du symbole
	\param s - le symbole à ajouter dans la table
	\return un pointeur sur un symbole valué
	*/
	SymboleValue * chercheAjoute (int ligne, int colonne, Symbole s);

	/*! 
	\fn friend ostream & operator <<(ostream & cout, TableSymboles ts)
	\brief Fonction amie pour pouvoir afficher la tables de symboles sur cout
	\param cout - le cout qu'on va utiliser pour afficher la table
	\param ts - la table de symboles à afficher sur cout
	\return la table de symboles affichée sur cout
	*/
	friend ostream & operator << (ostream & cout, TableSymboles ts);

private:
	/*!
	\var vector<SymboleValue *> table
	\brief Contient la table des symboles valués, triée sur la chaine
	*/
	vector<SymboleValue *> table;
};

#endif /* TABLESYMBOLES_H_ */
